#include "MainReactor.h"
#include <iostream>
#include <chrono>

using std::cout;
using std::endl;

void testTimer()
{
    MainReactor reactor("127.0.0.1", 8888);
    
    cout << "=== 定时器测试开始 ===" << endl;
    
    // 测试1：延迟执行（单次）
    reactor.runAfter(std::chrono::milliseconds(1000), []() {
        cout << "[Timer] 1秒后执行的单次定时器" << endl;
    });
    
    // 测试2：延迟执行（单次，较短）
    reactor.runAfter(std::chrono::milliseconds(500), []() {
        cout << "[Timer] 0.5秒后执行的单次定时器" << endl;
    });
    
    // 测试3：重复执行
    int count = 0;
    auto timerId = reactor.runEvery(std::chrono::milliseconds(2000), [&count]() {
        cout << "[Timer] 重复定时器执行第 " << (++count) << " 次" << endl;
    });
    
    // 测试4：延迟取消定时器
    reactor.runAfter(std::chrono::milliseconds(7000), [&reactor, timerId]() {
        cout << "[Timer] 7秒后取消重复定时器" << endl;
        reactor.cancelTimer(timerId);
    });
    
    // 测试5：多个定时器同时到期
    for (int i = 0; i < 3; ++i) {
        reactor.runAfter(std::chrono::milliseconds(3000), [i]() {
            cout << "[Timer] 3秒后并发定时器 " << i << endl;
        });
    }
    
    // 测试6：程序退出定时器
    reactor.runAfter(std::chrono::milliseconds(10000), []() {
        cout << "[Timer] 10秒后程序结束" << endl;
        exit(0);
    });
    
    cout << "定时器已设置，开始事件循环..." << endl;
    reactor.start();  // 这将阻塞在事件循环中
}

int main()
{
    testTimer();
    return 0;
}